package com.ruoyi.yf.mapper;

import com.ruoyi.system.domain.SysDept;
import com.ruoyi.yf.domain.YfTag;
import com.ruoyi.yf.domain.mobile.*;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 条形码Mapper接口
 *
 * @author XiaoYi...
 * @date 2020-03-17
 */
public interface YfTagMapper {
    /**
     * 查询条形码
     *
     * @param codeid 条形码ID
     * @return 条形码
     */
    public YfTag selectYfTagById(String codeid);

    /**
     * 查询条形码列表
     *
     * @param yfTag 条形码
     * @return 条形码集合
     */
    public List<YfTag> selectYfTagList(YfTag yfTag);

    /**
     * 新增条形码
     *
     * @param yfTag 条形码
     * @return 结果
     */
    public int insertYfTag(YfTag yfTag);

    /**
     * 修改条形码
     *
     * @param yfTag 条形码
     * @return 结果
     */
    public int updateYfTag(YfTag yfTag);

    /**
     * 删除条形码
     *
     * @param codeid 条形码ID
     * @return 结果
     */
    public int deleteYfTagById(String codeid);

    /**
     * 批量删除条形码
     *
     * @param codeids 需要删除的数据ID
     * @return 结果
     */
    public int deleteYfTagByIds(String[] codeids);

    /**
     * XiaoYi...
     * 查询条形码 关联医院查询 唯一
     *
     * @param yfTag
     * @Date : 2020-03-17 18:02
     */
    public List<YfTag> selectYfTagListOnly(YfTag yfTag);

    /**
     * 批量假删除条形码
     *
     * @param codeids 需要删除的数据ID
     * @param status  0：删除；1：正常；
     * @return 结果
     */
    public int updateRremoveAndRecoveryTagByIds(@Param("codeids") String[] codeids, @Param("status") String status);


    /**
     * 查询当前出入库数据
     *
     * @param uid
     * @return
     */
    List<YfTag> selectSMS(@Param("status") String status, @Param("userId") Long uid);


    /**
     * 批量出库
     *
     * @param
     * @param ids
     * @return
     */
    int updateSMS(@Param("uid") Long uid, @Param("status") String status, @Param("ids") String[] ids);


    /**
     * 根据sid、uid查询最后一次入库日期
     *
     */
    Date getLastInputTimeBySidAndUid(@Param("sid") String sid, @Param("uid") String uid);


    /**
     * 根据sid、uid查询最后一次出库日期
     *
     */
    Date getLastOutTimeBySidAndUid(@Param("sid") String sid, @Param("uid") String uid);


    /**
     * 根据sid、uid查询当前库存
     *
     */
    Double getCurrentInventoryBySidAndUid(@Param("sid") String sid, @Param("uid") String uid);


    /**
     * 根据sid查询暂存预警值
     *
     */
    List<YfLStoreValue> getStoreValueBySid(@Param("sid") String sid);


    /**
     * 医废类型日统计查询
     *
     * @param uid
     * @param date
     * @return
     */
    List<YfTypeStatis> selectUnionAll(@Param("uid") String uid, @Param("date") String date);


    /**
     * 查询今天各医废状态袋数
     *
     * @param uid
     * @return
     */
    String getTodayYFNum(Long uid);


    /**
     * 上传医废照片
     *
     * @param codeId
     * @param imgPath
     */
    void saveIMG(@Param("codeId") String codeId, @Param("imgPath") String imgPath, @Param("yfStatusFlag") String yfStatusFlag);


    /**
     * 根据暂存点id去视图查询医院id
     *
     * @param stagingId
     * @return
     */
    SysDept getHospitalByStaging(Long stagingId);


    /**
     * 根据条码获取医废信息，联查各状态人员姓名
     */
    YfTag getYFInfoByBarcode(String codeId);


    /**
     * 根据条码和暂存点获取医废信息，联查各状态人员姓名
     */
    YfTag getYFInfoByBarcodeAndStagingId(@Param("codeId") String codeId, @Param("stagingId") Long stagingId);


    /**
     * 根据暂存点id查询已收集医废(按收集员姓名分组)  已收集的
     */
    List<YfUserBag> getAlreadyCollYFByDeptId(Long stagingId);

    /**
     * 根据暂存点id查询已转运医废(按转运员姓名分组)  已转运的
     */
    List<YfUserBag> getAlreadyTransYFByDeptId(Long stagingId);

    /**
     * 根据暂存点id查询已入库医废(按入库员姓名分组)  已入库的
     */
    List<YfUserBag> getAlreadyInStoreYFByDeptId(Long stagingId);


    /**
     * 根据暂存点、收集人、医废状态查询医废
     */
    List<YfTag> getStatusYF(@Param("stagingId") Long stagingId, @Param("userId") Long userId,
                            @Param("yfStatus") String yfStatus, @Param("workId") Long workId);


    /**
     * 收集 -> 转运 医废
     */
    void collToTransYF(@Param("codeId") String codeId, @Param("userId") Long userId);


    /**
     * 收集 -> 入库 医废
     */
    void collToInStoreYF(@Param("codeId") String codeId, @Param("userId") Long userId);


    /**
     * 转运 -> 入库 医废
     */
    void transToInStoreYF(@Param("codeId") String codeId, @Param("userId") Long userId);


    /**
     * 入库 -> 出库 医废
     */
    void inStoreToOutStoreYF(@Param("codeId") String codeId, @Param("userId") Long userId);

    /**
     *  一键入库 收集 -> 入库
     */
    void oneKeyCollToInStoreYF(@Param("stagingId") Long stagingId, @Param("userId") Long userId);

    /**
     *  一键入库 转运 -> 入库
     */
    void oneKeyTransToInStoreYF(@Param("stagingId") Long stagingId, @Param("userId") Long userId);

    /**
     *  一键出库 入库 -> 出库
     */
    void oneKeyOutStoreYF(@Param("stagingId") Long stagingId, @Param("userId") Long userId);

    /**
     * 根据采集人查询当日各科室各类型医废重量及袋数
     */
    List<YfTag> getTodayEachKSYFWeightAndNumByUserId(@Param("stagingId") Long stagingId, @Param("userId") Long userId, @Param("date") Date date);


    /**
     * 根据采集人查询当日各科室各类型医废重量及袋数
     */
    List<YfHospitalMonth> getMonthKSYFWeightAndNumByUserId(@Param("stagingId") Long stagingId, @Param("userId") Long userId, @Param("date") String date);


    /**
     * 按条件查询医废历史记录
     */
    List<YfTag> getYFRecordByCondition(@Param("userId") Long userId, @Param("stagingId") Long stagingId, @Param("yftype") String yftype,
                                       @Param("startDate") String startDate, @Param("endDate") String endDate,
                                       @Param("startIndex") int startIndex, @Param("indexLength") int indexLength);


    // 批量添加医废（用于数据迁移）
    void saveYfTagList(@Param("yfTagList") List<YfTag> yfTagList);

    // 查询旧平台医废
    List<OldYF> getOldYF(@Param("startIndex") int startIndex, @Param("yfLength") int yfLength);

    // 查询旧平台照片
    List<OldPhoto> getAllOldPhoto();

    // 查询旧平台医废总数
    int getAllOldYFNum();


    /**
     * 查询科室下是否包含条码
     *
     * @param ids
     * @return
     */
    public int selectDeptTagSum(Long[] ids);


    /**
     * 获取医院医废统计报表
     */
    List<YfTag> getYFSatisticalByHospitalId(@Param("userId")Long userId, @Param("hospitalId")Long hospitalId,
                                            @Param("startDate")String startDate, @Param("endDate")String endDate);


    /**
     * 查询未出库完成的医废列表
     */
    List<YfTag> getNoOutStoreCompleteYF(@Param("sid")Long sid,@Param("ksid")Long ksid);

    // 批量添加医废 -- app提交医废数据
    int insertBatchYfTagList(@Param("list") List<YfTag> list);

    // 保存部分出库医废list
    int savePartOutStoreYF(@Param("list") List<YfTag> list);

    // 大批量添加测试数据到数据库
    void insertYFBatchData(@Param("list")List<YfTag> list);

    // 接口 - 批量添加医废
    void insertInterfaceYfTagList(@Param("list")List<YfTag> list);

    // 接口 - 批量更新医废
    void updateInterfaceYfTagList(@Param("list")List<YfTag> list);

    // 接口 - 查询石家庄卫健委下属的所有暂存点未提交的医废数据
    List<YfTag> getNoSubmitYF(Long deptId);

    // 根据提交的条码和状态更改update_status
    void updateStatusYFBycodeidAndStatus(List<YfTag> list);

    // 先根据id批量删除医废，再批量添加医废
    void deleteYFBycodeid(@Param("codeids") String[] codeids);
    void insertDelYfTagList(List<YfTag> list);


    // 查询石家庄卫健委下所有的暂存点，更改暂存点填报时间
    List<Long> getStagingIdsBySJZWJWID(Long sjzwjwid);

    // 石家庄卫健委服务器接收今日无医废暂存点ids
    void receiveNoYFStagingIds(@Param("stagingids") Long[] stagingids);



    // 根据暂存点id或医院id查询已收集医废(按科室分组)
    List<YfVehicle> getStatusYFByDeptIdGroupByKS(@Param("stagingId") Long stagingId,
                                                 @Param("hospitalId") Long hospitalId, @Param("yfStatus") String yfStatus);

    // 根据科室id及医废状态查询未入库医废总袋数及重量
    YfVehicle getYFTotalByKsIdAndYFStatus(@Param("stagingId") Long stagingId,
                                          @Param("ksId") Long ksId, @Param("yfStatus") String yfStatus);

    // 只有指定科室已收集状态才能修改成已入库状态
    void oneKSCollToInStoreYF(@Param("stagingId") Long stagingId, @Param("ksId") Long ksId, @Param("userId") Long userId);

    // 只有指定科室已入库状态才能修改成已出库状态
    void oneKSInToOutStoreYF(@Param("stagingId") Long stagingId, @Param("ksId") Long ksId, @Param("userId") Long userId);

    // 根据科室id及医废状态查询医废
    List<YfVehicle> getStatusYFByKSId(@Param("stagingId") Long stagingId,  @Param("ksId") Long ksId, @Param("yfStatus") String yfStatus);

    // 根据医废状态、用户等查询当天医废汇总
    List<YfTypeStatis> getDayYFStatusStatis(@Param("userId")Long userId, @Param("stagingId") Long stagingId, @Param("hospitalId")Long hospitalId,
                                            @Param("yfStatus")String yfStatus, @Param("day")String day);

    // 查询已入库的医废列表
    List<YfTag> getInStoreYFlistByStagingId(@Param("stagingId")Long stagingId, @Param("ksId")Long ksId);

    // 选择出库 - 医废出库
    int saveOutStoreYFlist(@Param("list")List<YfTag> yfList, @Param("userId")Long userId);

    // 查询扫码科室今天的医废列表
    List<YfTag> getDepartmentTodayYFTypeList(@Param("stagingId")Long stagingId, @Param("ksId")Long ksId,
                                             @Param("userId")Long userId);

    // 查询当前用户今天收集科室的医废列表
    List<YfTag> getAllKSTodagYFListByUserId(@Param("stagingId")Long stagingId, @Param("userId")Long userId);

    // 保存医废收集页面第二张照片
    void saveCollPhoto2(@Param("codeId")String codeId, @Param("imgPath")String imgPath);


}
